package main

import "fmt"

func countPairs(nums []int, k int) int {
	mem := map[int][]int{} // 数值：下标
	ans := 0
	for i, v := range nums {
		if p, ok := mem[v]; ok {
			// 注意，这里一定要用两个参数遍历，如果只有一个参数就表示p数组的下标，而不是我们需要的值。
			for _, j := range p {
				if (j*i)%k == 0 {
					ans++
				}
			}
			// 注意，这里不能写成p=append(p,i)
			mem[v] = append(p, i)

		} else {
			mem[v] = []int{i}

		}

	}
	return ans
}

// 基本思路：使用 map 空间换时间，遍历数组，将数组中的值和下标存入 map 中，
// 如果 map 中已经存在该值，则判断下标是否满足条件，如果满足条件，则 ans++，
// 否则将下标存入 map 中。
func main() {
	// - nums[0] == nums[6] 且 0 * 6 == 0 ，能被 2 整除。
	// - nums[2] == nums[3] 且 2 * 3 == 6 ，能被 2 整除。
	// - nums[2] == nums[4] 且 2 * 4 == 8 ，能被 2 整除。
	// - nums[3] == nums[4] 且 3 * 4 == 12 ，能被 2 整除。
	nums := []int{3, 1, 2, 2, 2, 1, 3}
	k := 2
	v := countPairs(nums, k)
	fmt.Println(v)
}
